{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 太空船Spaceship\n",
    "\n",
    "这个Jupyter笔记本演示了用Jupylet制作一个简单的游戏。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 如何使用Jupyter笔记本\n",
    "\n",
    "如果您不熟悉Jupyter笔记本，请打开[*01-hello-world.ipynb*](./01-hello-world.ipynb) 这个介绍Jupyter笔记本用户界面的笔记本。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 运行这个游戏\n",
    "\n",
    "运行这个笔记本，看看会发生什么。等你准备好了再回来读游戏代码。\n",
    "\n",
    "要运行游戏，请单击上面菜单栏中的 `Cell` 部分，然后从下拉列表中选择 `Run All`。笔记本将滚动至底部，游戏画布将与太空船游戏一起出现。点击游戏画布让其获得焦点，然后使用箭头键导航该船。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 先决条件\n",
    "\n",
    "要理解这段代码，您需要了解Python的 导入(import)、函数和类(class)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import sys\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sys.path.insert(0, os.path.abspath('./..'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from jupylet.sprite import Sprite\n",
    "from jupylet.label import Label\n",
    "from jupylet.app import App"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个游戏程序对象，并设置其画布采用默认的宽度和高:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "app = App()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从 [磁盘(disk)系统](../tree/images) 加载资源来创建各个精灵(`Sprite`)对象:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ship = Sprite('images/ship1.png', x=app.width/2, y=app.height/2, scale=0.5)\n",
    "moon = Sprite('images/moon.png', x=app.width-70, y=app.height-70, scale=0.5)\n",
    "stars = Sprite('images/stars.png', scale=2.5)\n",
    "alien = Sprite('images/alien.png', scale=0.5)\n",
    "circle = Sprite('images/yellow-circle.png', width=184)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将黄色圆圈(`circle`精灵对象)的不透明度设置为0，使得其不可见:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "circle.opacity = 0."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建包含一些文本的文本标签(`Label`)对象，并设置其颜色、大小和位置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "label = Label('hello, world', color='cyan', font_size=32, x=10, y=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一些我们将使用的全局变量并设置其初始值:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 宇宙飞船速度的x轴和y轴分量 vx, vy.\n",
    "vx = 0\n",
    "vy = 0\n",
    "\n",
    "# 各个箭头键的当前按下状态。\n",
    "up = False\n",
    "left = False\n",
    "right = False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个函数来更新宇宙飞船的位置、旋转和速度。\n",
    "`@app.run_me_every(1/60)` 装饰器将使得它每秒运行60次:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "@app.run_me_every(1/60)\n",
    "def update_ship(ct, dt):\n",
    "    \n",
    "    global vx, vy\n",
    "\n",
    "    if left:\n",
    "        ship.angle += 192 * dt\n",
    "        \n",
    "    if right:\n",
    "        ship.angle -= 192 * dt\n",
    "        \n",
    "    if up:\n",
    "        vx += 3 * math.cos(math.radians(90 + ship.angle))\n",
    "        vy += 3 * math.sin(math.radians(90 + ship.angle))\n",
    "\n",
    "    #\n",
    "    # 根据船的速度更新船的位置。\n",
    "    #\n",
    "    \n",
    "    ship.x += vx * dt\n",
    "    ship.y += vy * dt\n",
    "    \n",
    "    ship.wrap_position(app.width, app.height)\n",
    "    \n",
    "    #\n",
    "    # 如果飞船碰到外星人，让黄色的外星人圆圈可见。\n",
    "    #\n",
    "    \n",
    "    if len(ship.collisions_with(alien)) > 0:\n",
    "        circle.opacity = 0.5\n",
    "    else:\n",
    "        circle.opacity = 0.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个无休止地旋转外星人精灵的函数:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "@app.run_me_every(1/60)\n",
    "def rotate(ct, dt):\n",
    "    \n",
    "    alien.angle += 64 * dt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个函数来处理鼠标变化动作，并使用它来更新外星精灵的位置:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "@app.event\n",
    "def mouse_position_event(x, y, dx, dy):\n",
    "    \n",
    "    alien.x = x\n",
    "    alien.y = y\n",
    "    \n",
    "    circle.x = x\n",
    "    circle.y = y    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个函数来处理箭头键的按下操作:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "@app.event\n",
    "def key_event(key, action, modifiers):\n",
    "    \n",
    "    global up, left, right\n",
    "    \n",
    "    keys = app.window.keys\n",
    "    \n",
    "    if action == keys.ACTION_PRESS:\n",
    "\n",
    "        if key == keys.UP:\n",
    "            ship.image = 'images/ship2.png'\n",
    "            up = True\n",
    "\n",
    "        if key == keys.LEFT:\n",
    "            left = True\n",
    "\n",
    "        if key == keys.RIGHT:\n",
    "            right = True\n",
    "\n",
    "    if action == keys.ACTION_RELEASE:\n",
    "    \n",
    "        if key == keys.UP:\n",
    "            ship.image = 'images/ship1.png'\n",
    "            up = False\n",
    "\n",
    "        if key == keys.LEFT:\n",
    "            left = False\n",
    "\n",
    "        if key == keys.RIGHT:\n",
    "            right = False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建一个函数，将游戏每帧画面渲染到画布上。请注意，后绘制的对象位于先绘制的对象之上:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "@app.event\n",
    "def render(ct, dt):\n",
    "    \n",
    "    app.window.clear()\n",
    "    \n",
    "    stars.draw()\n",
    "    moon.draw()\n",
    "\n",
    "    circle.draw()\n",
    "    alien.draw()\n",
    "    ship.draw()\n",
    "    \n",
    "    label.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后开始游戏:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "app.run()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "en"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "cn",
   "useGoogleTranslate": true
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "222d25ffa4b54e2e871582d56b5f07e1": {
      "model_module": "ipyevents",
      "model_module_version": "1.7.1",
      "model_name": "EventModel",
      "state": {
       "_supported_key_events": [
        "keydown",
        "keyup"
       ],
       "_supported_mouse_events": [
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "source": "IPY_MODEL_bd30995616c94f5a95b540a29fb0453d",
       "watched_events": [
        "keydown",
        "keyup",
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "xy_coordinate_system": ""
      }
     },
     "27bab6a75d724989bca7e6b75091acc4": {
      "model_module": "ipyevents",
      "model_module_version": "1.7.1",
      "model_name": "EventModel",
      "state": {
       "_supported_key_events": [
        "keydown",
        "keyup"
       ],
       "_supported_mouse_events": [
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "source": "IPY_MODEL_e832a14967654dafbe3bfdd99cc0bb01",
       "watched_events": [
        "keydown",
        "keyup",
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "xy_coordinate_system": ""
      }
     },
     "38b5f597e53c4923aa0b1303b973d26c": {
      "buffers": [
       {
        "data": "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",
        "encoding": "base64",
        "path": [
         "value"
        ]
       }
      ],
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ImageModel",
      "state": {
       "_view_count": 0,
       "format": "JPEG",
       "layout": "IPY_MODEL_77ce2305d9084f71abe1f0699139bdc7",
       "value": {}
      }
     },
     "448cb6d3d195433cb9abd75deff556a7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "587ed13e317a4de69e9dfc35bc2dd4f9": {
      "model_module": "ipyevents",
      "model_module_version": "1.7.1",
      "model_name": "EventModel",
      "state": {
       "_supported_key_events": [
        "keydown",
        "keyup"
       ],
       "_supported_mouse_events": [
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "source": "IPY_MODEL_38b5f597e53c4923aa0b1303b973d26c",
       "watched_events": [
        "keydown",
        "keyup",
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "xy_coordinate_system": ""
      }
     },
     "6ba23b045630446585203c3a10373067": {
      "model_module": "ipyevents",
      "model_module_version": "1.7.1",
      "model_name": "EventModel",
      "state": {
       "_supported_key_events": [
        "keydown",
        "keyup"
       ],
       "_supported_mouse_events": [
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "source": "IPY_MODEL_bcb256c655034da6982e1e4e3aaad9be",
       "watched_events": [
        "keydown",
        "keyup",
        "click",
        "auxclick",
        "dblclick",
        "mouseenter",
        "mouseleave",
        "mousedown",
        "mouseup",
        "mousemove",
        "wheel",
        "contextmenu",
        "dragstart",
        "drag",
        "dragend",
        "dragenter",
        "dragover",
        "dragleave",
        "drop"
       ],
       "xy_coordinate_system": ""
      }
     },
     "77ce2305d9084f71abe1f0699139bdc7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bcb256c655034da6982e1e4e3aaad9be": {
      "buffers": [
       {
        "data": "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",
        "encoding": "base64",
        "path": [
         "value"
        ]
       }
      ],
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ImageModel",
      "state": {
       "_view_count": 1,
       "format": "JPEG",
       "layout": "IPY_MODEL_cd5f53b36bf648e0a8718a5d279c1295",
       "value": {}
      }
     },
     "bd30995616c94f5a95b540a29fb0453d": {
      "buffers": [
       {
        "data": "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",
        "encoding": "base64",
        "path": [
         "value"
        ]
       }
      ],
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ImageModel",
      "state": {
       "_view_count": 0,
       "format": "JPEG",
       "layout": "IPY_MODEL_448cb6d3d195433cb9abd75deff556a7",
       "value": {}
      }
     },
     "c3450332a52845bc9747077c0c71b95b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "cd5f53b36bf648e0a8718a5d279c1295": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e832a14967654dafbe3bfdd99cc0bb01": {
      "buffers": [
       {
        "data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCABAAUADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4yooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvZP2TdG0jWvG2qW+s6VY6lCmml0ju7dJVVvNQZAYEA4J5968br3P9jT/AJH7V/8AsFn/ANGx125ck8TBPufM8ZVJU8jxMoOzUd16o8i8YxRQeL9ZggjSKKO/nRERQqqokYAADoAO1ZNfQHjH4uWHgXxhqWkeA/CujKYLqRb2+u0d5bibcfMwQwIAbI5JHHAAq58Q4dA+JnwNm+Idto9vpuvWEn+ktCOXIcK6seNwIcOCckdM9c6SwcJOfJO8ld2t23szhocSYmhHDvE4VwpVHGKlzJu8tuaPRP1duup850V6R8APANr448VzNqxZdF0yLz70htm/Odibv4QcEk+inGDyOt1L4+jQ7yTTfAfhPRLPRIjsTz4GDzKONxCMoGeeu4881jTw0XTVSrLlT20u2eljM7rRxcsHgaHtZxScveUYxvsm2nq97W2PCq9k/ZN0bSNa8bapb6zpVjqUKaaXSO7t0lVW81BkBgQDgnn3ra8SaX4Z+LPwx1HxroGjxaL4k0ZWfULaAARzqo3E8YzlQSDjOQVOeDVT9jT/AJH7V/8AsFn/ANGx11YbDezxVPW8Xqn3PEzzOvruQYxqLp1aekot6xd11W6a1TW6OH8OWFjL8eLXTZbO3ksm8Q+SbZolMRj88jZtxjbjjHStn9qLStL0f4mi00jTbPT7b7BE/k2sCxJuJfJ2qAM8Dms/wt/ycVaf9jN/7cGt39rcFvi0qqCSdOhAA7/M9Q4r6pN2+0bRqz/t/Cx5nZ0W7dL3Wp49RX0fe2vhf4F+C9LuLjRbXWfGepR783IDLAQAWx12qpO0YwWOeccCl4U+Mth461u38N/Ebwvok1lfuLeK4hjZfJdjhc7mJAyfvKQR1qfqUItQqVLSfS23qzZcUYmvTlisJhHUoRv73Mk5JbuMWtVvbVXPn2iu3+Nfgj/hAvHM2kQyPLYTRi5snf7xiYkbWx3VlYe+AeM1xFcVSnKlNwluj6fBYyjjcPDEUXeM0mvmFFFbPgi+sdN8X6TfanaW93YRXcZuYZ4xIjxZw4KkEHgmlFXaTNq03TpynFXaTdu/l8zGor1n9qTwtZeG/iHFLpdjb2VhqFmkqQ28Sxxo65RgqqAB91WPu1ek/s++AvDF78KIpPEGl6XcX+uS3Btpbi3R50QLsGwsMjGxm49c1208vnOvKhfVHy2M4vwuFymlmbi3GpayW+t2/us7+h8u0Vs6L4eu9Q8aWvhcqUupr9bN/wDYbftY/hyfwr0z9onS9Jm+KGk+CvCWiafYyxRRQMttbpEZJ5iNoYqMthSnJ9T+OEcPKVNz7NL1bPWr5xSpYynhbX5oym30jGNtX6t2R41RX0l4w1nwt8CrWx0HwzollqviaSETXN/eJkqOQCcHIyQcIpGAASTnJh8D/EDQfi7qZ8I/EDw1pkd5eIws760UoyuFJ2gsSytgHB3EEjBHNdP1GCn7J1Fz9raX7XPDXFWJnh3jqeEk8OtebmSk4reShbbrunbWx850V03jXwvP4R+IN34bu2E32W5VUkI4ljbDI2PdSMjscjtX0Z8Z9V8MfCWSx1jw34R0VNe1BWhgP2ZY4oo4zuZ9qbfmJdRkYJA68YOdLBuanKcuVR3O3MOJI0KmGpYam6sq6bhZpLRJ6t7Kzve3TY8S/Zx07T9V+LemWOqWNrfWrxTl4LmFZI2xExGVYEHBGaz/AI5WVnp3xY1+y0+0t7O1inURwwRiNEHlqcBRwK9F+F3jH/hOP2iNC1t9JtdNuP7PmiuFtxhZZBHKTIe5J3Ac5OABk4zXGfGuwudV+PWsaZZpvubu/igiX1ZkRR+prapTisH7mvv7/I83CYutLiNvELk/2dNxvdJ87vrs/U84r0X9nHTtP1X4t6ZY6pY2t9avFOXguYVkjbETEZVgQcEZr0/xl4h8P/Am0sPDfhTRbDUPELwCa71C7TJwcj5tp3c4OEDAKMdc1o/BLx7ofxC8awz63oFhp3iuyjkltryzUotyhUq6MCSSQGyASe5GMHOlDB04YiMJTXMmrq2npfucebcSYvFZRXxFHDSVGUZKM+Zc2zSlybqN+t7pa2seD/GK0tbD4oeIbOxtobW2ivXWOGGMIiD0CjgCuSrs/jh/yVzxN/1/v/SuMrzsQrVZer/M+zyeTll9Bvfkj/6SgooorE9EKKKKACiiigAooooAKKKKACvc/wBjT/kftX/7BZ/9Gx14ZXsn7Jus6RovjbVLjWdVsdNhfTSiSXdwkSs3mocAsQCcA8e1duXNLEwb7nzPGVOVTI8TGCu3HZeqPNPHH/I667/2Ebj/ANGNXtPw8/5NK8Wf9fUv8oa8T8YyxT+L9ZngkSWKS/ndHRgyspkYggjqCO9eueBdc0W2/Zg8TaPcaxp8OpTXMpitJLlFmkBEWCqE7j0PQdjWmDklVqX7SOHiOlOeX4RRTbVSl+ZufshyRr4U8ZeXZLe3CiJjbMeJx5cm1DwepDDoeveud/4XJ4F/6Ij4b/76h/8AkeuN+Cfj+T4feLhqEsMlxp1ynk3sKY3FM5DLn+JTzjjPIyM5Hoev+BfhF4x1SXXdA+JOneH4rl/Nms7pUUK7Ek7Fd4yo9uQO3GBXTRrVJ4eEKLXNG907fernjZjl2Ewuc4ivmVObpVeVxnF1LJpWcZKm7+auhLf412EPhvVovD/wmttMtLmFoLm4sZlSNSysFL7IACRk4BPrVb9jT/kftX/7BZ/9Gx1Z8V+OfBfgP4b3PgX4d3baneXyst9qWPl+cbXbOACxX5QF4Uc5yOcf9k3WdI0XxtqlxrOq2OmwvppRJLu4SJWbzUOAWIBOAePaqhUf1qkpzTt2tZeWhjiMFD+wcfPDYaVNTtbmcnKaVrSak215Lt0Of8Lf8nFWn/Yzf+3Brqf2m2RPjppzyEBFt7UsT0x5jZrjfDl/YxfHi11KW8t47JfEPnG5aVREI/PJ37s4245z0rZ/ai1XS9Y+Jou9I1Kz1C2+wRJ51rOsqbgXyNykjPI4rmUksLP/ABI9p0Jyz3DOzt7Bq/Z3X4nRftmJIPHGjSFW8ttN2qexIlfP8x+deIafHPLf28Vt/r3lVYv94kY/WverHxl4F+KXgaw8OeP9RbRNc05QtvqJ+5IcAFtx4ywA3K2ASMg+jfDXhr4S/DjVovEureP7XxNc2bCWztbBEb94PukhHfJB5GWUA4JrTEUFia3toSXK+t1p6rc5MnzaWTZasuxFGbr07pRUJNT1dnGSXLZ31u1bUb+2g8J8T6BGo/fLZSM5z/CX+X9Q1eBV1XxT8Z3fjvxjca9dReRGVENtBu3eTEudq57nJJPuxrq/+EA8JS/AS48cWms3U+vWqx/abRLmJo4S9yIwHQLvXKHIy3v0rnxH+116k6ey1+SPXydrh/KcJhcXfmk1DTW0pttJ+SbtfY8qooorgPrT334lLL44/Z48IeI4FM9/pky2M4Xk8/uiT7syRH/gVdD4y8QQ+Cvil8MvCsUsYttGtUhuXXhT56iAlvoF3/8AAs1z/wCyz4q8P2uj6z4Z8U6jYWlp9ohv7X7bcLFG0isMjLEDIZIiB3wa8y+MniAeIfijrer21wssIujFbSxtlTHHhEZSOxC5z717dTEKFGNeL96XKn/27/nZH5bg8oqYjMquV1YNUaXtZRfRqqkkl/hUpnufhzwbHY/tQ+IdbuF8vT7C2bVFkZfl3zrg5/EzHP8As15H4I1w+IP2h9N164+X7drYlVWOdoZjsX8BtH4V7L8TPiV4cuPgxc6jp2r6bJ4h1nTbe0mgguEadNwJdXUHcoUPL24Le9fLFjdT2V7Be2srRXFvIssTr1VlOQR9CKnHVKdKcIwd1fmfzen4HRwtgsVmGHxFXFRcZ8ioRv2jH3n6OTv8j0z9qZJE+MupM6sFeC3ZCe48pRx+INcx8H455fip4XW3++NVt2P+6JAW/wDHQa9d1nXPht8Z9HsZvEOtR+E/E9rH5TSygeSwzkgFiFZMkkAsGBJ6jks8LxfCr4Q3EviA+LI/F2upGyWcdiF2JuGDgqzKpIOCxbgE4BpTw6niPbKS5G73v89t7mmGzieGyZZZOhP6xGHIo8rabS5U+a3Ly9W7nN/tQPC/xuCxD50t7ZZef4uv/oJWuj/bT/5DPhr/AK95/wD0JK8Y8ReIbzxN41uPEWpsouLy6ErgH5UUEBVGeyqABnsK9X/a513RNb1bw++i6xp+prFBMJGtLlJghLLgHaTjpUyrRqUsRJdWrfeaUsurYLMMooSV/ZwqKT6J8i6+uxzX7Lv/ACWjSf8Arlcf+iXrd1p4k/a8jMxUL/bVuBkfxFEC/riuY/Zx1HT9K+LemX2qX1rY2qRTh57mZY41zEwGWYgDJOKp/GjVIZ/jDrWr6Pfwzxi6jlt7m2lDqSqJhlYZBwR+lRCooYSL7Tv+B1YrBzxPEVaFrKWG5b9LubNn9qdJU+MuotIGCvb27R57r5ajj8Qar/sxhz8bNCKhsAXJbHp9nk6/jiu91TWPh38aNEsJPEWuw+FPFVnF5Tzz4EMg5JwWIVlJyQCwYEkc9To/CsfCv4beKrezh8W2euavqG+KXUy6RWtlCEZ/vbimWZVX7xPI6fxdCoKWLVdSXK3e9/Pa29zyJ5tKhw9PK50J+3jTcHFRdrKLXMpW5eW2u93skeNfHD/krnib/r/f+lcZXW/GK7tb/wCKHiG8sbmG6tpb12jmhkDo49Qw4Irkq8rEO9WXq/zPvsni45fQT35I/wDpKCiiisT0QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK69/Fllb/C5fCGl6bJDc3l39p1W7kkz52wnykQdlAIJz3HvXIUVcJuF7ddDnxGFp4jk9or8rUl6ra/ez116pPoFFFFQdAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k=",
        "encoding": "base64",
        "path": [
         "value"
        ]
       }
      ],
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ImageModel",
      "state": {
       "_view_count": 0,
       "format": "JPEG",
       "layout": "IPY_MODEL_c3450332a52845bc9747077c0c71b95b",
       "value": {}
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
